Amazon ConnectとLexでのコールセンター向けAIチャットボットの構築において、「音声入力の最大時間」「発話の最大待機時間」「発話終了判定の最大時間」の仕様を確認してみた
はじめに
最近、下記の記事にある、クラウド型コンタクトセンターサービスであるAmazon Connectと、高度な自然言語モデルを備えたフルマネージド型チャットボットであるAmazon Lexを組み合わせて、コールセンター向けAIチャットボットを構築する機会がありました。
- 【RAG】Amazon BedrockとConnect、Kendraを利用し、社内情報や社外の最新情報などの取り込んだデータをもとに回答するコールセンター向けAIチャットボットを構築してみた
- Amazon BedrockのClaudeとAmazon Connectを利用し、電話で色々な質問に答えてくれるコールセンター向けAIチャットボットを構築してみた
Connectと組み合わせてLexを採用する際、ユーザーからの音声入力について、以下の3つの仕様が理解できていなかったため、ドキュメントや実際に試しながら確認しましたので、記事にまとめます。
- 音声入力の最大時間
- ユーザーが一回の発話で音声入力可能な最大時間
- 発話の最大待機時間
- ユーザーが発話をするまでボットが待機する時間
- 発話終了判定の最大時間
- ユーザーが発話を途中で止めてから、ボットが発話終了と判断するまでの時間
先に結論
先に結論をお伝えすると、下記の3点は全て最大15秒です。上限緩和などはできません。
- 音声入力の最大時間
- 発話の最大待機時間
- 発話終了判定の最大時間
構築
前提条件として、Connectインスタンスは、構築済みとします。
Lexのボット構築
Lexのボットとインテントを構築します。
- Lexのコンソール画面から、[ボットの作成]をクリックします。
- [空のボットを作成します]を選択し、ボット名を記載し、下記画像の通りに入力します。
- 日本語を選択し、[完了]をクリックします。
これでボットが作成できました。
CloudWatch Logsに会話のログ出力設定をします。
[エイリアス]の[会話ログ]から、設定可能です。
続いて、インテントを作成します。
インテント名はfree
、ユーザーがこのインテントを呼び出すトリガーとなる発話は、質問
にします。
スロット名freeinput
、スロットタイプは自由形式の入力のAMAZON.FreeFormInput
にします。
確認プロンプトでは、ユーザーが発した言葉をそのまま伝えるように{freeinput}
とします。
Connectのコンタクトフロー作成
Connectのコンタクトフローは4つです。
[顧客の入力を取得する]フローでは、読み上げるテキストは、「ご質問があるかたは、質問、とお伝え下さい」にします。
また、先程作成したLexボットとインテント名を入力して保存します。
このコンタクトフローと電話番号を紐付けると設定完了です。
後は電話をかけて検証します。
検証
テストのイメージは、下記の通りです。
再掲しますが、以下の3点を検証します。
- 音声入力の最大時間
- ユーザーが一回の発話で音声入力可能な最大時間
- 発話の最大待機時間
- ユーザーが発話をするまでボットが待機する時間
- 発話終了判定の最大時間
- ユーザーが発話を途中で止めてから、ボットが発話終了と判断するまでの時間
音声入力の最大時間
まずは、ユーザーが音声入力可能な最大時間を確認します。
実際に試してみると、約15秒がMAXでした。
AWSドキュメントも確認すると、音声入力の時間は、Connectのドキュメントには以下の記載がありました。
音声の問い合わせのタイムアウト値を設定するには、Lex ボットを呼び出す [顧客の入力を取得する] ブロックで、次のセッション属性を使用します。これらの属性を使用すると、発信者からの音声入力をAmazon Lex で収集する前に顧客が発話を終了したと判断するまで待つ時間を指定できます。
属性値
•発話の最大時間
x-amz-lex:audio:max-length-ms:[intentName]:[slotToElicit] 入力を打ち切って Amazon Connect に戻るという判断をするまでの顧客の発話時間の長さ。多くの入力が予想される場合や、顧客が情報を提供するまでの時間を増やす場合は、この時間を延長できます。 デフォルト = 12,000 ミリ秒 (12 秒)。最大許容値は 15000 ミリ秒です。
音声入力の最大時間は、デフォルトで12秒、セッション属性を設定すると15秒が最大でした。
私が検証した際は、15秒程度だったので、デフォルトが12秒というのは、少し疑問ですが、誤差範囲とします。
また、Lexのドキュメントには、以下の記載がありました。
発話の最大長さ x-amz-lex:audio:max-length-ms:
: Amazon Lex V2 が、音声入力を切り捨ててアプリケーションに音声を返すまでの待ち時間を定義します。長時間の回答が予想される場合や、お客様に情報を提供する時間を長く取りたい場合などは、入力の長さを長くすることができます。 デフォルト = 13,000 ミリ秒 (13 秒)。最大値は 15,000 秒 (15 秒) です。
Lex V2 ストリーミング API を使用すると、ボットはユーザー入力の発話を自動的に検出できます。
音声入力は、デフォルト13秒、最大値15秒ということで、Connectのデフォルトは、12秒なので違いはあるものの、最大値は、15秒と同じようです。
下記のセッション属性を設定することで、音声入力の最大時間を15秒にできます。
x-amz-lex:audio:max-length-ms:[インテント名]:[スロット名]
例えば、音声入力の最大時間を8秒にしたい場合、[顧客の入力を取得する]フローでは、以下の設定にします。単位はミリ秒です。
x-amz-lex:audio:max-length-ms:*:*
も可能で、その場合は、全てのインテント名とスロット名で適用されます。
Connectのドキュメントには、以下の記載もありました。
[発話の最大時間]] を 15000 ミリ秒より長くすると、問い合わせは [エラー] ブランチにルーティングされます。
実際に30秒に設定し、電話をかけてると、発話は聞き取りますが、確認プロンプトやインテントを閉じるときのプロンプト流れず、エラーにルーティングされました。
ユーザーが音声入力可能な最大時間は、15秒と分かりました。
発話の最大待機時間
ユーザーが発話をするまでボットが待機する時間を確認します。
Connectのドキュメントを確認すると、下記の通り、デフォルトでは3秒でした。
x-amz-lex:audio:start-timeout-ms:[intentName]:[slotToElicit]
顧客は話さないと見なすまでに待つ時間。顧客のために、情報を探したり思い出したりする時間を確保する場合には、発話前として割り当てられた時間を延長することが可能です。
デフォルト = 3,000 ミリ秒 (3 秒)。
この設定値を調整する例としては、電話越しに顧客が商品の番号を伝える必要がある場合、調べる時間が必要なので、発話の最大待機時間を増やした方がよいです。
これを15秒に設定してみます。
設定としては、セッション属性のキーx-amz-lex:audio:start-timeout-ms:インテント名:スロット名
、値15000
にするだけです。
x-amz-lex:audio:start-timeout-ms:*:*
も可能で、インテントを呼び出すサンプル発話時やスロットの値を聞き取る際に適用されます。
下記のスロットプロンプトである「ご質問ください」から12,3秒待機したあと、話すと、エラーにならずに聞いてくれました。
また、12,3秒待機してから、発話した場合、発話してから15秒間音声入力できたので、そこはうれしいポイントでした。
15秒以上の値を設定して検証すると、15秒以上は待機しませんでしたので、発話の最大待機時間は15秒でした。
発話終了判定の最大時間
ユーザーが途中で発話を止めてから、ボットが発話終了と判断するまでの時間を確認します。
x-amz-lex:audio:end-timeout-ms:[intentName]:[slotToElicit]
顧客が発話を停止してから発話が完了したと見なすまでに待つ時間。入力している間の無音の時間を見込む場合は、割り当てられた時間を延長できます。
デフォルト = 600 ミリ秒 (0.6 秒)
0.6秒は、かなり短いですね。少し言葉に詰まると、そこで終了と見なされます。
8秒に設定変更してみます。
セッション属性のキーx-amz-lex:audio:end-timeout-ms:インテント名:スロット名
、値8000
にするだけです。
x-amz-lex:audio:end-timeout-ms:*:*
も可能で、インテントを呼び出すサンプル発話時やスロットの値を聞き取る際に適用されます。
発話を途中で止めた後、8秒以内の言葉はLex側が認識してくれました。
設定を15秒にすると、言葉を発してから発話を止めて、12,3秒以内の言葉は拾いましたが、音声入力の最大時間が15秒なので、残り2秒しか話せなかったです。
x-amz-lex:audio:end-timeout-ms
は、ドキュメントに上限は、書かれていないですが、発話の最大時間が15秒なので、15秒以上にする必要はありません。
Lexの文字起こし精度
ちなみに、今回の検証で話した内容について、Lexでの文字起こしは、会話ログから確認できます。
下記が実際に話した内容です。
お客様の課題、ニーズ、リソースに合わせて最適なAmazon Connect活用方法をご提案するコンサルテーションから、公開後の運用支援まで、AWSの最先端技術活用をクラスメソッドが総合的にご支援いたします。
下記がLexが文字起こした内容です。
お 客 様 の 課題 ニーズ リソース に 合わせ て 最適 な アマゾン コネクト 活用 方法 を ご 提案 する コンサルテーション から 高 介護 の 運用 支援 まで aws の 最 先端 技術 活用し を 、 クラスメート が 総合 的 に 引っ越し いたし ます
漢字やカタカナ、英語に自動で変換されており、句読点もついていましたので、比較的認識精度は高いと感じました。
最後に
今回の調査結果は以下のようにまとめることができます。全て最大15秒でした。
- 音声入力の最大時間:15秒
- ユーザーが一回の発話で音声入力可能な最大時間
- 発話の最大待機時間:15秒
- ユーザーが発話をするまでボットが待機する時間
- 発話終了判定の最大時間は:15秒
- ユーザーが発話を途中で止めてから、ボットが発話終了と判断するまでの時間
特に音声入力の最大時間が15秒という点は、ConnectとLexでチャットボットを構築する際に非常に重要なポイントとなります。
この仕様を理解しておくことで、チャットボットの設計と実装に役立ちますので、ご参考頂けますと幸いです。